package nextel.util.mvc;

import com.nextel.ui.OSoftKey;
import com.nextel.ui.OUILook;
import com.nextel.ui.custom.OScrollListWrap;
import java.io.IOException;
import javax.microedition.lcdui.Image;
import pe.com.nextel.main.MVCAction;
import pe.com.nextel.rms.Persistente;
import nextel.Configuracion;
import pe.com.nextel.idioma.IdiomaManager;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.List;

/**
 *
 * @author eespinoza
 * @version 1.0
 */
public abstract class MVCBasicLista extends MVCAction {
    
    private List listaObjetos;
    private OScrollListWrap lstMenu;
//    private OScrollList lstMenu;
    // para que elimine los objetos de la lista
    protected boolean flagEliminarObjetosLista = true;
    // para que prosiga a otra pantalla sin validar que la lista este vacia
    protected boolean flagSeguirSinValidar;
    //
    private OSoftKey cmdSeguir,  cmdAtras;
    private String tituloFormulario;
    private String nombreBotonAtras;
    private String nombreBotonSeguir;
    // para que no presione dos veces al momento de seleccionar un boton
    protected boolean flagValidarDobleClick;
    
        protected byte busquedaMVC;
    public static final byte VISITA = 1;
    public static final byte NOVISITA = 2;
    //agrego
    List listaDatos = new ArrayList();
    
    protected MVCBasicLista(String pTituloFormulario) {
        this.tituloFormulario = pTituloFormulario;
        this.nombreBotonAtras = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_ATRAS);
        this.nombreBotonSeguir = IdiomaManager.getInstance().getMensaje(IdiomaManager.JAVA_SEGUIR);
    }
    
    public MVCBasicLista(String tituloFormulario, String botonSegir, String botonAtras) {
        this.tituloFormulario = tituloFormulario;
        this.nombreBotonAtras = botonAtras;
        this.nombreBotonSeguir = botonSegir;
    }
    
    protected void destroy() {
        super.destroy();
        
        if (this.listaObjetos != null && flagEliminarObjetosLista) {
            this.listaObjetos.clear();
            this.listaObjetos = null;
        }
    }
    
    protected void createView() {
        cmdSeguir = new OSoftKey(nombreBotonSeguir );
        cmdAtras = new OSoftKey(nombreBotonAtras );
        
        formulario.setTitle(tituloFormulario, OUILook.PLAIN_SMALL_TITLE);
        
        formulario.addSoftKey(cmdSeguir);
        formulario.addSoftKey(cmdAtras);
        
        crearBotonesAdicionales( );
        
    }
    
    protected void createItems() {
        
        createItemBasic();
        
        flagValidarDobleClick = true;
        
    }
    
    protected void createItemBasic() {
        
        Image img = null;
        try {
            if(busquedaMVC == NOVISITA){ 
                img = Image.createImage("/ico_no_order.PNG");
            }else  {
                img = Image.createImage("/item.PNG");
            }
            
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        listaDatos.clear();
        
        if (listaObjetos == null) {
            listaObjetos = new ArrayList();
        }
        
        listaObjetos = getListaObjetos();
        
        for (int i = 0; i < listaObjetos.size(); i++) {
            
            listenerLista elem = (listenerLista) listaObjetos.get(i);
            
            listaDatos.add(elem.getCampoMostrar());
            
        }
        
        lstMenu = new OScrollListWrap(formulario.getWidth(),formulario.getBodyHeight(),
                OUILook.PLAIN_SMALL_SOFTKEY, OUILook.PLAIN_SMALL_TEXT );
        
        lstMenu.setModeWrap(true);
        lstMenu.isWithBorder = false;
        lstMenu.populate(listaDatos);
        
        Image[] images = new Image[listaDatos.size( )];

        for (int i = 0; i < images.length; i++) {
             images[i] = img;
        }

        if(images.length > 0){
            lstMenu.setImages(images, formulario.getBodyHeight());
        }
        
        formulario.add(lstMenu);
        
    }
    
    public Persistente getSeleccionado() {
        
        return listaObjetos.size() > 0 ? (Persistente) listaObjetos.get(lstMenu.getSelectedIndex()) : null;
    }
    
    public void performAction(OSoftKey c) {
        
        if (flagValidarDobleClick) {
            
            if (c == cmdAtras) {
                
                flagValidarDobleClick = false;
                destroy();
                atras();
                
            } else if (c == cmdSeguir) {
                
                flagValidarDobleClick = false;
                
                if (listaObjetos.size() <= 0 && !flagSeguirSinValidar) {
                    flagValidarDobleClick = true;
                    return;
                }
                
                Persistente persistente = getSeleccionado();
                destroy();
                seguir(persistente);
                
            }
//            destroy();
            botonesClickAdicional(c);
        }
    }
    
    public abstract void crearBotonesAdicionales( );
    
    public abstract void botonesClickAdicional(OSoftKey c);
    
    public abstract List getListaObjetos();
    
    protected abstract void seguir(Persistente bean);
    
    protected abstract void atras();
}
